﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Cryptography;
using System.Text;
using System.Diagnostics;
using Microsoft.Security.Application;
using System.Data.SqlClient;
using System.Data;


public partial class Aanmelden : System.Web.UI.Page
{
    
    private Persoon p;
    private ConnectDB db;
    private SqlDataReader reader;
    private SqlCommand cmd;

    const int MAX_MILES = 1500;
    const int MIN_MILES = 1000;

    protected void Page_Load(object sender, EventArgs e)
    {

    }


    protected void btn_create_account_Click(object sender, EventArgs e)
    {
       maakPersoonAan();
    }

    public void maakPersoonAan()
    {
        string salt = RandomString.Generate(16, 20);
        
        Random r = new Random();
        // nieuw object van persoon wordt aangemaakt, deze wordt gevuld met de gegevens die
        // de gebruiker heeft ingevoerd.
        bool emailBestaat = emailExist(txt_email.Text.Trim().ToLower());
        p = new Persoon();
        p.Voornaam = txt_voornaam.Text.Trim();
        if (txt_tussenvoegsel.Text.Trim() != null) p.TussenVoegsel = txt_tussenvoegsel.Text;
        p.Achternaam = txt_achternaam.Text.Trim();
        if (dd_geslacht.SelectedValue == "Man") p.Geslacht = "m";
        else if (dd_geslacht.SelectedValue == "Vrouw") p.Geslacht = "v";
        else p.Geslacht = "o";
        p.GeboorteDatum = dd_dag.Text.Trim() + "-" + dd_maand.Text.Trim() + "-" + dd_jaar.Text.Trim();
        p.TelefoonNummer = txt_telefoon.Text.Trim();
        if (emailBestaat == false)
        {
            lbl_foutmelding.Text = "";
            p.EMailAdres = txt_email.Text.Trim().ToLower();
        }
        else lbl_foutmelding.Text = Fout.emailBestaat;
        p.InhollandMiles = r.Next(MIN_MILES, MAX_MILES); // random amount of inholland miles, would normally be gained from traveling
        p.Postcode = txt_postcode.Text.Trim();
        p.Plaats = txt_plaats.Text.Trim();
        p.StraatNaam = txt_straat.Text.Trim();
        p.Huisnummer = txt_huisnummer.Text.Trim();
        p.Password = SHA.generateHash(txt_wachtwoord.Text.Trim(), salt); // genereer een hash van het wachtwoord met salt
        p.Salt = salt;
        p.Vraag = dd_vraag.SelectedItem.Text;
        p.Antwoord = txt_antwoord.Text.ToLower().Trim();

   
        // De nieuwe persoon wordt weggeschreven naar de database, gebruiker wordt
        // doorgestuurd naar een inlogscherm.
        if (emailBestaat == false)
        {
            db = new ConnectDB();
            db.persoonNaarDB(sp.setNieuweKlant, p);
            Response.Redirect("Login.aspx");
        }
    }

    private bool emailExist(string email)
    {

        // Check if email is already in database to prevent double entries.
        bool result = false;
        try
        {
            ConnectDB._Connection.Open();
            cmd = new SqlCommand(sp.getPersoonFromEmail, ConnectDB._Connection);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter eMail = cmd.Parameters.Add("@Emailadres", SqlDbType.VarChar);
            eMail.Value = txt_email.Text.Trim().ToLower();
            reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                if (reader["Emailadres"].ToString() == email)
                    result = true;
            }
        }
        catch (SqlException e)
        {
            lbl_foutmelding.Text = Fout.databaseOffline;
            LogError.writeToLogFile(e.Message);
        }
        finally
        {
            reader.Close();
            ConnectDB._Connection.Close();
        }
        return result;
    }

}